package com.forfan.bigbang.component.activity.setting; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.net.Uri; import android.os.Build; import android.os.Handler; import android.provider.Settings; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.SwitchCompat; import android.view.LayoutInflater; import android.view.View; import android.widget.CompoundButton; import android.widget.RelativeLayout; import com.forfan.bigbang.R; import com.forfan.bigbang.baseCard.AbsCard; import com.forfan.bigbang.component.activity.SettingFloatViewActivity; import com.forfan.bigbang.component.activity.floatviewwhitelist.FloatViewWhiteListActivity; import com.forfan.bigbang.component.activity.howtouse.HowToUseActivity; import com.forfan.bigbang.util.ConstantUtil; import com.forfan.bigbang.util.NotificationCheckUtil; import com.forfan.bigbang.util.SnackBarUtil; import com.forfan.bigbang.util.ToastUtil; import com.forfan.bigbang.util.UrlCountUtil; import com.forfan.bigbang.view.DialogFragment; import com.forfan.bigbang.view.HintTextView; import com.forfan.bigbang.view.SimpleDialog; import com.shang.commonjar.contentProvider.SPHelper; import static com.forfan.bigbang.util.ConstantUtil.BROADCAST_BIGBANG_MONITOR_SERVICE_MODIFIED; import static com.forfan.bigbang.util.ConstantUtil.BROADCAST_CLIPBOARD_LISTEN_SERVICE_MODIFIED; /** * Created by penglu on 2015/11/23. */ public class FloatAndNotifySettingCard extends AbsCard { private static final String IS_LONG_PREESS_TIPS_SHOW = "show_long_pressed_tips"; private RelativeLayout showFloatViewRL; private RelativeLayout showNotifyRL; private RelativeLayout longPressRL; private HintTextView showFloatViewTV; private HintTextView showNotifyTV; private SwitchCompat showFloarViewSwitch; private SwitchCompat showNotifySwitch; private boolean showFloatView = true; private boolean showNotify = false; private boolean isInFirst = true; private boolean isClickFloat = false, isClickNotify = false; private Handler handler; public FloatAndNotifySettingCard(Context context) { super(context); initView(context); } @Override protected void onDetachedFromWindow() { handler.removeCallbacksAndMessages(null); super.onDetachedFromWindow(); } private void initView(Context context) { mContext = context; handler = new Handler(); LayoutInflater.from(context).inflate(R.layout.card_float_notify_setting, this); showFloatViewRL = (RelativeLayout) findViewById(R.id.show_float_view_rl); showFloarViewSwitch = (SwitchCompat) findViewById(R.id.show_float_view_switch); showFloatViewTV = (HintTextView) findViewById(R.id.show_float_view_tv); showNotifyRL = (RelativeLayout) findViewById(R.id.show_notify_rl); showNotifySwitch = (SwitchCompat) findViewById(R.id.show_notify_switch); showNotifyTV = (HintTextView) findViewById(R.id.show_notify_tv); longPressRL = (RelativeLayout) findViewById(R.id.long_press_rl); // requestFloatViewTv= (TextView) findViewById(R.id.show_float_view_request); if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR2) { longPressRL.setVisibility(GONE); } showFloarViewSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { UrlCountUtil.onEvent(UrlCountUtil.STATUS_SHOW_FLOAT_WINDOW, isChecked); showFloatView = isChecked; SPHelper.save(ConstantUtil.SHOW_FLOAT_VIEW, showFloatView); mContext.sendBroadcast(new Intent(BROADCAST_CLIPBOARD_LISTEN_SERVICE_MODIFIED)); mContext.sendBroadcast(new Intent(BROADCAST_BIGBANG_MONITOR_SERVICE_MODIFIED)); // if(!SPHelper.getBoolean(IS_LONG_PREESS_TIPS_SHOW,false) && isChecked){ // if(!isInFirst){ // showLongClickDialog(); // SPHelper.save(IS_LONG_PREESS_TIPS_SHOW,true); // } // // } if (isClickFloat && isChecked) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && !Settings.canDrawOverlays(mContext)) { SnackBarUtil.show(buttonView, mContext.getString(R.string.punish_float_problem), mContext.getString(R.string.punish_float_action), new OnClickListener() { @Override public void onClick(View v) { try { // Uri packageURI = Uri.parse("package:" + mContext.getPackageName()); // Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS,packageURI); // mContext.startActivity(intent); Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + mContext.getPackageName())); mContext.startActivity(intent); } catch (Throwable e) { SnackBarUtil.show(buttonView, R.string.open_setting_failed_diy); } } }); } else { SnackBarUtil.show(buttonView, mContext.getString(R.string.punish_float_problem)); } } isInFirst = false; showFloatViewTV.setShowHint(!showFloatView); } }); showNotifySwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { UrlCountUtil.onEvent(UrlCountUtil.STATUS_SHOW_NOTIFY, isChecked); showNotify = isChecked; SPHelper.save(ConstantUtil.IS_SHOW_NOTIFY, showNotify); mContext.sendBroadcast(new Intent(BROADCAST_CLIPBOARD_LISTEN_SERVICE_MODIFIED)); showNotifyTV.setShowHint(!showNotify); if (isClickNotify && isChecked) { if (!NotificationCheckUtil.areNotificationsEnabled(mContext.getApplicationContext())) { SnackBarUtil.show(buttonView, mContext.getString(R.string.notify_enable), mContext.getString(R.string.notify_disabled_title), new OnClickListener() { @Override public void onClick(View v) { try { Intent intent = new Intent(); intent.setClassName("com.android.settings", "com.android.settings.Settings$AppNotificationSettingsActivity"); intent.putExtra("app_package", mContext.getPackageName()); intent.putExtra("app_uid", mContext.getApplicationInfo().uid); mContext.startActivity(intent); } catch (Throwable e) { SnackBarUtil.show(buttonView, R.string.open_setting_failed_diy); } } }); } else { SnackBarUtil.show(buttonView, mContext.getString(R.string.notify_enable)); } } } }); findViewById(R.id.setting_floatview).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { UrlCountUtil.onEvent(UrlCountUtil.CLICK_SETTINGS_SET_STYLE_BIGBANG); Intent intent = new Intent(mContext, SettingFloatViewActivity.class); mContext.startActivity(intent); } }); findViewById(R.id.float_white_list_rl).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { UrlCountUtil.onEvent(UrlCountUtil.CLICK_SETTINGS_FLOAT_WHITE_LIST); Intent intent = new Intent(mContext, FloatViewWhiteListActivity.class); mContext.startActivity(intent); } }); findViewById(R.id.open_from_outside_rl).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { UrlCountUtil.onEvent(UrlCountUtil.CLICK_SETTINGS_OPEN_FROM_OUTSIDE); Intent intent = new Intent(mContext, HowToUseActivity.class); intent.putExtra(HowToUseActivity.GO_TO_OPEN_FROM_OUTER,true); mContext.startActivity(intent); } }); longPressRL.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { showLongPressDialog(v); } }); showFloatViewRL.setOnClickListener(myOnClickListerner); showNotifyRL.setOnClickListener(myOnClickListerner); refresh(); } private void showLongPressDialog(View view) { String[] longpress = mContext.getResources().getStringArray(R.array.long_press_key); int index = SPHelper.getInt(ConstantUtil.LONG_PRESS_KEY_INDEX, 0); SimpleDialog.Builder builder = new SimpleDialog.Builder(R.style.SimpleDialogLight) { @Override public void onPositiveActionClicked(DialogFragment fragment) { // 这里是保持开启 super.onPositiveActionClicked(fragment); int index = getSelectedIndex(); SPHelper.save(ConstantUtil.LONG_PRESS_KEY_INDEX, index); mContext.sendBroadcast(new Intent(BROADCAST_BIGBANG_MONITOR_SERVICE_MODIFIED)); if (index == 2) { SnackBarUtil.show(view, "", R.string.long_press_toast, new OnClickListener() { @Override public void onClick(View v) { try { Intent intent = new Intent(Settings.ACTION_VOICE_INPUT_SETTINGS); mContext.startActivity(intent); } catch (Throwable e) { SnackBarUtil.show(v, R.string.open_setting_failed_diy); } } }); } } @Override public void onDismiss(DialogInterface dialog) { super.onCancel(dialog); } }; builder.items(longpress, index) .title(mContext.getString(R.string.long_press)) .positiveAction(mContext.getString(R.string.confirm)) .negativeAction(mContext.getString(R.string.cancel)); DialogFragment fragment = DialogFragment.newInstance(builder); fragment.show(((AppCompatActivity) mContext).getSupportFragmentManager(), null); } private OnClickListener myOnClickListerner = new OnClickListener() { @Override public void onClick(View v) { int id = v.getId(); switch (id) { case R.id.show_float_view_rl: isClickFloat = true; showFloarViewSwitch.setChecked(!showFloarViewSwitch.isChecked()); break; case R.id.show_notify_rl: isClickNotify = true; showNotifySwitch.setChecked(!showNotifySwitch.isChecked()); break; default: break; } } }; private void refresh() { showFloatView = SPHelper.getBoolean(ConstantUtil.SHOW_FLOAT_VIEW, false); showNotify = SPHelper.getBoolean(ConstantUtil.IS_SHOW_NOTIFY, false); showFloarViewSwitch.setChecked(showFloatView); showNotifySwitch.setChecked(showNotify); showNotifyTV.setShowAnimation(true); showFloatViewTV.setShowAnimation(true); } }