package com.plusonelabs.calendar; import android.annotation.TargetApi; import android.appwidget.AppWidgetManager; import android.content.Context; import android.content.Intent; import android.os.Build; import android.os.Bundle; import android.preference.PreferenceActivity; import android.support.annotation.NonNull; import com.plusonelabs.calendar.prefs.ApplicationPreferences; import com.plusonelabs.calendar.util.PermissionsUtil; import java.util.List; public class WidgetConfigurationActivity extends PreferenceActivity { private static final String PREFERENCES_PACKAGE_NAME = "com.plusonelabs.calendar.prefs"; private int widgetId = 0; @NonNull public static Intent intentToStartMe(Context context, int widgetId) { Intent intent = new Intent(context, WidgetConfigurationActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP + Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, widgetId); return intent; } @Override protected void onPause() { super.onPause(); ApplicationPreferences.save(this, widgetId); } @Override protected void onResume() { super.onResume(); restartIfNeeded(); } @Override protected void onCreate(Bundle savedInstanceState) { prepareForNewIntent(getIntent()); super.onCreate(savedInstanceState); } private void prepareForNewIntent(Intent newIntent) { int newWidgetId = newIntent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, 0); if (newWidgetId == 0) { newWidgetId = ApplicationPreferences.getWidgetId(this); } Intent restartIntent = null; if (newWidgetId == 0 || !PermissionsUtil.arePermissionsGranted(this)) { restartIntent = MainActivity.intentToStartMe(this); } else if (widgetId != 0 && widgetId != newWidgetId) { restartIntent = MainActivity.intentToConfigure(this, newWidgetId); } else if (widgetId == 0) { widgetId = newWidgetId; ApplicationPreferences.startEditing(this, widgetId); } if (restartIntent != null) { widgetId = 0; startActivity(restartIntent); finish(); } } private void restartIfNeeded() { if (widgetId != ApplicationPreferences.getWidgetId(this) || !PermissionsUtil.arePermissionsGranted(this)) { widgetId = 0; startActivity(MainActivity.intentToStartMe(this)); finish(); } } @Override public void onBuildHeaders(List<Header> target) { loadHeadersFromResource(R.xml.preferences_header, target); setTitle(ApplicationPreferences.getWidgetInstanceName(this)); } @Override @TargetApi(Build.VERSION_CODES.KITKAT) protected boolean isValidFragment(String fragmentName) { if (fragmentName.startsWith(PREFERENCES_PACKAGE_NAME)) { return true; } return super.isValidFragment(fragmentName); } }