package tk.wasdennnoch.androidn_ify.systemui.qs.tiles;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.res.Resources;
import android.os.UserHandle;
import de.robv.android.xposed.XposedHelpers;
import tk.wasdennnoch.androidn_ify.R;
import tk.wasdennnoch.androidn_ify.XposedHook;
import tk.wasdennnoch.androidn_ify.systemui.qs.TilesManager;
import tk.wasdennnoch.androidn_ify.systemui.qs.tiles.misc.LiveDisplayObserver;
public class LiveDisplayTile extends QSTile {
public static final String TILE_SPEC = "live_display";
private static final String TAG = "LiveDisplayTile";
private String[] mTileEntries;
private int[] mTileEntryIconRes;
private int mCurrentMode = 0;
public LiveDisplayTile(TilesManager tilesManager, Object host, String key) {
super(tilesManager, host, key);
updateCustomTileEntries();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(LiveDisplayObserver.LIVE_DISPLAY_MODE_CHANGED);
mContext.registerReceiver(mBroadcastReceiver, intentFilter);
}
@Override
public void handleUpdateState(Object state, Object arg) {
mState.icon = mResUtils.getDrawable(mTileEntryIconRes[mCurrentMode]);
mState.label = mTileEntries[mCurrentMode];
super.handleUpdateState(state, arg);
}
@Override
public void handleClick() {
try {
getCustomTileNextModePendingIntent().send();
} catch (PendingIntent.CanceledException e) {
e.printStackTrace();
}
}
@Override
public void handleLongClick() {
startActivityDismissingKeyguard("cyanogenmod.settings.LIVEDISPLAY_SETTINGS");
}
@Override
public void handleDestroy() {
mContext.unregisterReceiver(mBroadcastReceiver);
super.handleDestroy();
}
private PendingIntent getCustomTileNextModePendingIntent() {
Intent i = new Intent("cyanogenmod.hardware.NEXT_LIVEDISPLAY_MODE");
return (PendingIntent) XposedHelpers.callStaticMethod(PendingIntent.class, "getBroadcastAsUser",
mContext, 0, i, PendingIntent.FLAG_UPDATE_CURRENT, XposedHelpers.getStaticObjectField(UserHandle.class, "CURRENT"));
}
private void updateCustomTileEntries() {
Resources res = mResUtils.getResources();
mTileEntries = res.getStringArray(R.array.live_display_entries);
mTileEntryIconRes = new int[] {
R.drawable.ic_livedisplay_auto,
R.drawable.ic_livedisplay_off,
R.drawable.ic_livedisplay_day,
R.drawable.ic_livedisplay_night,
R.drawable.ic_livedisplay_outdoor
};
}
public void onModeChanged(int mode) {
mCurrentMode = mode;
refreshState();
}
private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
XposedHook.logD(TAG, "Broadcast received, action: " + intent.getAction());
switch (intent.getAction()) {
case LiveDisplayObserver.LIVE_DISPLAY_MODE_CHANGED:
if (intent.hasExtra(LiveDisplayObserver.EXTRA_LIVE_DISPLAY_MODE))
onModeChanged(intent.getIntExtra(LiveDisplayObserver.EXTRA_LIVE_DISPLAY_MODE, 0));
break;
}
}
};
}