misp-bump/app/src/main/java/lu/circl/mispbump/activities/UploadInfoActivity.java

270 lines
8.0 KiB
Java

package lu.circl.mispbump.activities;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;
import androidx.viewpager.widget.ViewPager;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.tabs.TabLayout;
import java.util.UUID;
import lu.circl.mispbump.R;
import lu.circl.mispbump.auxiliary.DialogManager;
import lu.circl.mispbump.auxiliary.PreferenceManager;
import lu.circl.mispbump.fragments.UploadCredentialsFragment;
import lu.circl.mispbump.fragments.UploadSettingsFragment;
import lu.circl.mispbump.models.UploadInformation;
public class UploadInfoActivity extends AppCompatActivity {
public static String EXTRA_UPLOAD_INFO_UUID = "uploadInformationUuid";
private PreferenceManager preferenceManager;
private UploadInformation uploadInformation;
private ViewPagerAdapter viewPagerAdapter;
private FloatingActionButton fab;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_upload_information);
preferenceManager = PreferenceManager.getInstance(UploadInfoActivity.this);
// tint statusBar
getWindow().setStatusBarColor(getColor(R.color.colorPrimary));
// getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
parseExtra();
initToolbar();
initViewPager();
initViews();
}
@Override
protected void onResume() {
super.onResume();
// refresh current uploadInformation
if (uploadInformation != null) {
uploadInformation = preferenceManager.getUploadInformation(uploadInformation.getUuid());
initContent();
}
}
@Override
public void onBackPressed() {
super.onBackPressed();
saveCurrentSettings();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_upload_info, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.delete:
DialogManager.deleteSyncInformationDialog(UploadInfoActivity.this, new DialogManager.IDialogFeedback() {
@Override
public void positive() {
preferenceManager.removeUploadInformation(uploadInformation.getUuid());
finish();
}
@Override
public void negative() {
}
});
return true;
case android.R.id.home:
saveCurrentSettings();
finish();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
private void parseExtra() {
Intent i = getIntent();
UUID currentUUID = (UUID) i.getSerializableExtra(EXTRA_UPLOAD_INFO_UUID);
uploadInformation = preferenceManager.getUploadInformation(currentUUID);
if (uploadInformation == null) {
throw new RuntimeException("Could not find UploadInformation with UUID {" + currentUUID.toString() + "}");
}
}
private void initToolbar() {
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
ActionBar ab = getSupportActionBar();
assert ab != null;
TextView toolbarTitle = findViewById(R.id.toolbarTitle);
toolbarTitle.setText(uploadInformation.getRemote().organisation.getName());
ab.setHomeAsUpIndicator(R.drawable.ic_close);
ab.setDisplayShowTitleEnabled(false);
ab.setDisplayHomeAsUpEnabled(true);
}
private void initViewPager() {
ViewPager viewPager = findViewById(R.id.viewPager);
TabLayout tabLayout = findViewById(R.id.tabLayout);
viewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager(), uploadInformation);
viewPager.setAdapter(viewPagerAdapter);
viewPager.addOnPageChangeListener(onPageChangeListener());
tabLayout.setupWithViewPager(viewPager);
}
private void initViews() {
fab = findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// for the UploadActivity to have the latest settings of this UploadInfoObject
saveCurrentSettings();
Intent i = new Intent(UploadInfoActivity.this, UploadActivity.class);
i.putExtra(UploadActivity.EXTRA_UPLOAD_INFO, uploadInformation.getUuid());
startActivity(i);
}
});
}
private void initContent() {
switch (uploadInformation.getCurrentSyncStatus()) {
case COMPLETE:
break;
case FAILURE:
break;
case PENDING:
break;
default:
break;
}
}
private void saveCurrentSettings() {
uploadInformation.setAllowSelfSigned(viewPagerAdapter.uploadSettingsFragment.getAllowSelfSigned());
uploadInformation.setPull(viewPagerAdapter.uploadSettingsFragment.getPull());
uploadInformation.setPush(viewPagerAdapter.uploadSettingsFragment.getPush());
uploadInformation.setCached(viewPagerAdapter.uploadSettingsFragment.getCache());
preferenceManager.addUploadInformation(uploadInformation);
}
private ViewPager.OnPageChangeListener onPageChangeListener() {
return new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
if (position == 0) {
float scale = (1 - positionOffset);
fab.setScaleX(scale);
fab.setScaleY(scale);
}
}
@Override
public void onPageSelected(int position) {
}
@Override
public void onPageScrollStateChanged(int state) {
}
};
}
class ViewPagerAdapter extends FragmentPagerAdapter {
private UploadSettingsFragment uploadSettingsFragment;
private UploadCredentialsFragment uploadCredentialsFragment;
ViewPagerAdapter(@NonNull FragmentManager fm, UploadInformation uploadInformation) {
super(fm, ViewPagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
uploadSettingsFragment = new UploadSettingsFragment(uploadInformation);
uploadCredentialsFragment = new UploadCredentialsFragment(uploadInformation);
}
@NonNull
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return uploadSettingsFragment;
case 1:
return uploadCredentialsFragment;
default:
uploadSettingsFragment = new UploadSettingsFragment();
return uploadSettingsFragment;
}
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
switch (position) {
case 0:
return getString(R.string.settings);
case 1:
return getString(R.string.credentials);
default:
return "N/A";
}
}
@Override
public int getCount() {
return 2;
}
}
}