package com.tresorit.zerokitsdk.activity; import android.app.Activity; import android.app.ProgressDialog; import android.content.ClipData; import android.content.ClipboardManager; import android.content.Intent; import android.databinding.DataBindingUtil; import android.os.Bundle; import android.support.design.widget.Snackbar; import android.support.v7.app.ActionBar; import android.support.v7.app.AppCompatActivity; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewTreeObserver; import com.tresorit.zerokit.Zerokit; import com.tresorit.zerokit.call.Action; import com.tresorit.zerokit.response.ResponseZerokitError; import com.tresorit.zerokitsdk.R; import com.tresorit.zerokitsdk.ZerokitApplication; import com.tresorit.zerokitsdk.component.DaggerMainComponent; import com.tresorit.zerokitsdk.databinding.ActivityMainBinding; import com.tresorit.zerokitsdk.fragment.DecryptFragment; import com.tresorit.zerokitsdk.fragment.EncryptFragment; import com.tresorit.zerokitsdk.message.CopyEncryptedTextMessage; import com.tresorit.zerokitsdk.message.TabSelectMessage; import com.tresorit.zerokitsdk.viewmodel.MainViewModel; import com.tresorit.zerokit.AdminApi; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; import javax.inject.Inject; import static com.tresorit.zerokitsdk.util.Util.dpToPx; public class MainActivity extends AppCompatActivity { @SuppressWarnings({"WeakerAccess", "CanBeFinal"}) @Inject MainViewModel viewModel; @SuppressWarnings({"WeakerAccess", "CanBeFinal"}) @Inject EventBus eventBus; @SuppressWarnings({"WeakerAccess", "CanBeFinal"}) @Inject Zerokit zerokit; @SuppressWarnings({"WeakerAccess", "CanBeFinal"}) @Inject AdminApi adminApi; private final EncryptFragment encryptFragment = new EncryptFragment(); private final DecryptFragment decryptFragment = new DecryptFragment(); @SuppressWarnings("WeakerAccess") ActivityMainBinding binding; @SuppressWarnings("WeakerAccess") String userId; private enum Mode { Encrypt, Decrypt } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); DaggerMainComponent.builder().applicationComponent(ZerokitApplication.get(this).component()).build().inject(this); binding = DataBindingUtil.setContentView(this, R.layout.activity_main); binding.setViewmodel(viewModel); whoAmI(); binding.container.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { binding.bottomBar.post(new Runnable() { @Override public void run() { binding.bottomBar.setVisibility(binding.container.getRootView().getHeight() - binding.container.getHeight() > dpToPx(MainActivity.this, 200) ? View.GONE : View.VISIBLE); } }); } }); if (savedInstanceState == null) showFragment(Mode.Encrypt); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_main, menu); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.logout: logout(); break; case R.id.copyUserId: copyUserIdToClipboard(userId); break; } return super.onOptionsItemSelected(item); } @Override protected void onStart() { super.onStart(); eventBus.register(this); } @Override protected void onStop() { eventBus.unregister(this); super.onStop(); } @Subscribe @SuppressWarnings("unused") public void onEvent(TabSelectMessage message) { switch (message.getTabId()) { case R.id.tab_encrypt: showFragment(Mode.Encrypt); break; case R.id.tab_decrypt: showFragment(Mode.Decrypt); break; } } @Subscribe @SuppressWarnings("unused") public void onEvent(CopyEncryptedTextMessage message) { ClipboardManager clipboard = (ClipboardManager) getSystemService(Activity.CLIPBOARD_SERVICE); ClipData clip = ClipData.newPlainText("Encrypted text", message.getEncryptedMessage()); clipboard.setPrimaryClip(clip); showMessage("Encrypted text copied to clipboard"); } private void showFragment(Mode mode) { switch (mode) { case Decrypt: getSupportFragmentManager().beginTransaction().replace(R.id.contentContainer, decryptFragment).commit(); break; case Encrypt: getSupportFragmentManager().beginTransaction().replace(R.id.contentContainer, encryptFragment).commit(); break; } } private void whoAmI() { zerokit.whoAmI().enqueue(new Action<String>() { @Override public void call(String userId) { MainActivity.this.userId = userId; ActionBar supportActionBar = MainActivity.this.getSupportActionBar(); if (supportActionBar != null) supportActionBar.setSubtitle("User Id: " + userId); } }); } private void copyUserIdToClipboard(String userId) { ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); ClipData clip = ClipData.newPlainText("User Id", userId); clipboard.setPrimaryClip(clip); showMessage("Copied User Id: " + userId); } private void showMessage(String message) { Snackbar.make(binding.container, message, Snackbar.LENGTH_LONG).show(); } private void logout() { final ProgressDialog progressDialog = new ProgressDialog(this); progressDialog.setMessage("Logging out..."); progressDialog.setCancelable(false); progressDialog.show(); zerokit.logout().enqueue(new Action<String>() { @Override public void call(String s) { progressDialog.dismiss(); adminApi.clearToken(); Intent intent = new Intent(MainActivity.this, RootActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); MainActivity.this.startActivity(intent); } }, new Action<ResponseZerokitError>() { @Override public void call(ResponseZerokitError s) { progressDialog.dismiss(); } }); } }