package novoda.com.sandbox; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.ListView; import java.util.List; public class MainActivity extends AppCompatActivity { private ArrayAdapter<String> adapter; private Button signInButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); resetSignInStateOnRotation(savedInstanceState); signInButton = (Button) findViewById(R.id.main_activity_sign_in_button); signInButton.setOnClickListener(onSignInOutClicked); adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1) { @Override public View getView(final int position, View convertView, ViewGroup parent) { View view = super.getView(position, convertView, parent); view.setOnClickListener(onItemClicked); view.setTag(position); return view; } }; ListView listView = (ListView) findViewById(R.id.main_activity_random_numbers_passwords); listView.setAdapter(adapter); } private void resetSignInStateOnRotation(Bundle savedInstanceState) { if (savedInstanceState != null) { Application.setSignedOut(); } } private final View.OnClickListener onSignInOutClicked = new View.OnClickListener() { @Override public void onClick(View v) { if (Application.isSignedIn()) { Application.setSignedOut(); refreshUi(); } else { startActivity(SignInActivity.createIntent()); } } }; private final View.OnClickListener onItemClicked = new View.OnClickListener() { @Override public void onClick(View v) { String packageName = adapter.getItem((Integer) v.getTag()); startActivity(DetailsActivity.createIntent(packageName)); } }; @Override protected void onResume() { super.onResume(); refreshUi(); } private void refreshUi() { updateSignInState(); showData(); } private void updateSignInState() { signInButton.setText(Application.isSignedIn() ? "Sign out" : "Sign in"); } private void showData() { adapter.clear(); List<ApplicationInfo> installedApplications = getPackageManager().getInstalledApplications(PackageManager.GET_META_DATA); if (Application.isSignedIn()) { for (ApplicationInfo application : installedApplications) { adapter.add(application.packageName); } } else { adapter.add(installedApplications.get(0).packageName); } } }