package com.plusonelabs.calendar;
import android.appwidget.AppWidgetManager;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import com.plusonelabs.calendar.prefs.InstanceSettings;
import com.plusonelabs.calendar.util.PermissionsUtil;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author yvolk@yurivolkov.com
*/
public class MainActivity extends AppCompatActivity implements ActivityCompat.OnRequestPermissionsResultCallback {
protected static final String KEY_VISIBLE_NAME = "visible_name";
protected static final String KEY_ID = "id";
boolean permissionsGranted = false;
ListView listView = null;
@NonNull
public static Intent intentToConfigure(Context context, int widgetId) {
return intentToStartMe(context).putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, widgetId);
}
@NonNull
public static Intent intentToStartMe(Context context) {
return new Intent(context.getApplicationContext(), MainActivity.class).
setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK + Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView) findViewById(android.R.id.list);
checkPermissions();
if (preparedToOpen()) {
updateScreen();
}
}
private void checkPermissionsAndRequestThem() {
checkPermissions();
if (!permissionsGranted) {
Log.d(this.getLocalClassName(), "Requesting permission: " + PermissionsUtil.PERMISSION);
ActivityCompat.requestPermissions(this, new String[]{PermissionsUtil.PERMISSION}, 1);
}
}
private void checkPermissions() {
permissionsGranted = PermissionsUtil.arePermissionsGranted(this);
}
private boolean preparedToOpen() {
int newWidgetId = 0;
if (permissionsGranted) {
newWidgetId = getIntent().getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, 0);
if (newWidgetId == 0 && InstanceSettings.getInstances(this).size() == 1) {
newWidgetId = InstanceSettings.getInstances(this).keySet().iterator().next();
}
if (newWidgetId != 0) {
startActivity(WidgetConfigurationActivity.intentToStartMe(this, newWidgetId));
finish();
}
}
return newWidgetId == 0;
}
private void updateScreen() {
int messageResourceId = R.string.permissions_justification;
if (permissionsGranted) {
if (InstanceSettings.getInstances(this).isEmpty()) {
messageResourceId = R.string.no_widgets_found;
} else {
messageResourceId = R.string.select_a_widget_to_configure;
}
}
TextView message = ((TextView) this.findViewById(R.id.message));
if (message != null) {
message.setText(messageResourceId);
}
if (!InstanceSettings.getInstances(this).isEmpty() && permissionsGranted) {
fillWidgetList();
listView.setVisibility(View.VISIBLE);
} else {
listView.setVisibility(View.GONE);
}
Button goToHomeScreenButton = (Button) findViewById(R.id.go_to_home_screen_button);
if (goToHomeScreenButton != null) {
goToHomeScreenButton.setVisibility(permissionsGranted &&
InstanceSettings.getInstances(this).isEmpty() ? View.VISIBLE : View.GONE);
}
Button grantPermissionsButton = (Button) findViewById(R.id.grant_permissions);
if (grantPermissionsButton != null) {
grantPermissionsButton.setVisibility(permissionsGranted ? View.GONE : View.VISIBLE);
}
}
private void fillWidgetList() {
final List<Map<String, String>> data = new ArrayList<>();
for (InstanceSettings settings : InstanceSettings.getInstances(this).values()) {
Map<String, String> map = new HashMap<>();
map.put(KEY_VISIBLE_NAME, settings.getWidgetInstanceName());
map.put(KEY_ID, Integer.toString(settings.getWidgetId()));
data.add(map);
}
listView.setAdapter(new SimpleAdapter(this, data, R.layout.widget_list_item,
new String[]{KEY_VISIBLE_NAME}, new int[]{R.id.widget_name}));
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Map<String, String> stringStringMap = data.get(position);
String widgetId = stringStringMap.get(KEY_ID);
Intent intent = WidgetConfigurationActivity.intentToStartMe(
MainActivity.this, Integer.valueOf(widgetId));
startActivity(intent);
finish();
}
});
}
public void grantPermissions(View view) {
checkPermissionsAndRequestThem();
updateScreen();
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
checkPermissions();
updateScreen();
}
public void onHomeButtonClick(View view) {
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
finish();
}
}