package com.android.systemui.cm;
import com.android.settingslib.cm.ShortcutPickHelper;
import com.android.systemui.R;
import com.android.systemui.cm.LockscreenShortcutsHelper.Shortcuts;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.res.ColorStateList;
import android.graphics.Color;
import android.graphics.ColorMatrix;
import android.graphics.ColorMatrixColorFilter;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;
import java.util.ArrayList;
public class LockscreenShortcutsActivity extends Activity implements View.OnClickListener,
ShortcutPickHelper.OnPickListener, View.OnTouchListener, LockscreenShortcutsHelper.OnChangeListener {
private static final int[] sIconIds = new int[]{R.id.left_button, R.id.right_button};
private static final String ACTION_APP = "action_app";
private ActionHolder mActions;
private ShortcutPickHelper mPicker;
private LockscreenShortcutsHelper mShortcutHelper;
private View mSelectedView;
private ColorMatrixColorFilter mFilter;
private ColorStateList mDefaultTintList;
@Override
public void shortcutPicked(String uri, String friendlyName, boolean isApplication) {
onTargetChange(uri);
}
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
GlowBackground background = (GlowBackground) v.getBackground();
background.showGlow();
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
background = (GlowBackground) v.getBackground();
background.hideGlow();
break;
}
return false;
}
@Override
public void onChange() {
updateDrawables();
}
private class ActionHolder {
private ArrayList<CharSequence> mAvailableEntries = new ArrayList<CharSequence>();
private ArrayList<String> mAvailableValues = new ArrayList<String>();
public void addAction(String action, int entryResId) {
mAvailableEntries.add(getString(entryResId));
mAvailableValues.add(action);
}
public int getActionIndex(String action) {
int count = mAvailableValues.size();
for (int i = 0; i < count; i++) {
if (TextUtils.equals(mAvailableValues.get(i), action)) {
return i;
}
}
return -1;
}
public String getAction(int index) {
if (index > mAvailableValues.size()) {
return null;
}
return mAvailableValues.get(index);
}
public CharSequence[] getEntries() {
return mAvailableEntries.toArray(new CharSequence[mAvailableEntries.size()]);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.lockscreen_shortcuts);
getActionBar().setDisplayHomeAsUpEnabled(true);
mPicker = new ShortcutPickHelper(this, this);
mShortcutHelper = new LockscreenShortcutsHelper(this, this);
ColorMatrix cm = new ColorMatrix();
cm.setSaturation(0);
mFilter = new ColorMatrixColorFilter(cm);
ImageView unlockButton = (ImageView) findViewById(R.id.middle_button);
mDefaultTintList = unlockButton.getImageTintList();
createActionList();
initiateViews();
updateDrawables();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
private void initiateViews() {
int size = getResources().getDimensionPixelSize(R.dimen.lockscreen_icon_size);
for (int id : sIconIds) {
View v = findViewById(id);
v.setOnClickListener(this);
v.setOnTouchListener(this);
GlowBackground background = new GlowBackground(Color.WHITE);
background.setBounds(0, 0, size, size);
v.setBackground(background);
}
}
private void updateDrawables() {
for (int i = 0; i < sIconIds.length; i++) {
int id = sIconIds[i];
ImageView v = (ImageView) findViewById(id);
v.setImageTintList(null);
v.setColorFilter(null);
Shortcuts shortcut = Shortcuts.values()[i];
v.setTag(mShortcutHelper.getUriForTarget(shortcut));
Drawable drawable;
if (mShortcutHelper.isTargetEmpty(shortcut)) {
drawable = getResources().getDrawable(R.drawable.ic_lockscreen_shortcuts_blank);
} else {
drawable = mShortcutHelper.getDrawableForTarget(shortcut);
if (drawable == null) {
drawable = getResources().getDrawable(shortcut == Shortcuts.LEFT_SHORTCUT
? R.drawable.ic_mic_26dp : R.drawable.ic_camera_alt_24dp);
v.setImageTintList(mDefaultTintList);
} else {
v.setColorFilter(mFilter);
}
}
v.setImageDrawable(drawable);
}
}
private void createActionList() {
mActions = new ActionHolder();
mActions.addAction(LockscreenShortcutsHelper.NONE, R.string.lockscreen_none_target);
mActions.addAction(LockscreenShortcutsHelper.DEFAULT, R.string.lockscreen_default_target);
mActions.addAction(ACTION_APP, R.string.select_application);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
mPicker.onActivityResult(requestCode, resultCode, data);
super.onActivityResult(requestCode, resultCode, data);
}
@Override
public void onClick(View v) {
mSelectedView = v;
final GlowBackground background = (GlowBackground) mSelectedView.getBackground();
mSelectedView.postOnAnimation(new Runnable() {
@Override
public void run() {
background.showGlow();
}
});
final DialogInterface.OnClickListener l = new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int item) {
onTargetChange(mActions.getAction(item));
dialog.dismiss();
}
};
final DialogInterface.OnCancelListener cancel = new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
onTargetChange(null);
}
};
final AlertDialog dialog = new AlertDialog.Builder(this)
.setTitle(R.string.lockscreen_choose_action_title)
.setItems(mActions.getEntries(), l)
.setOnCancelListener(cancel)
.create();
dialog.show();
}
private void onTargetChange(String uri) {
if (uri == null) {
final GlowBackground background = (GlowBackground) mSelectedView.getBackground();
background.hideGlow();
return;
}
if (uri.equals(ACTION_APP)) {
mPicker.pickShortcut(null, null, 0);
} else {
mSelectedView.setTag(uri);
saveCustomActions();
GlowBackground background = (GlowBackground) mSelectedView.getBackground();
background.hideGlow();
}
}
private void saveCustomActions() {
ArrayList<String> targets = new ArrayList<String>();
for (int id : sIconIds) {
View v = findViewById(id);
String uri = (String) v.getTag();
targets.add(uri);
}
mShortcutHelper.saveTargets(targets);
}
}