MrZaiko/Polysmee

View on GitHub
app/src/main/java/io/github/polysmee/calendar/googlecalendarsync/GoogleCalendarSyncActivity.java

Summary

Maintainability
A
0 mins
Test Coverage
B
85%
package io.github.polysmee.calendar.googlecalendarsync;


import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

import java.io.IOException;
import java.util.function.Consumer;

import io.github.polysmee.R;
import io.github.polysmee.login.MainUser;

public class GoogleCalendarSyncActivity extends AppCompatActivity {

    private String calendarId;
    private TextView calendarIdText;
    private Button exportToCalendar, copyToClipboard, deleteCalendar;

    private ClipboardManager clipboard;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_calendar_export);

        calendarIdText = findViewById(R.id.calendarSyncActivityCalendarIdText);

        copyToClipboard = findViewById(R.id.calendarSyncActivityCopyButton);
        copyToClipboard.setOnClickListener(this::copyCalendarIdToClipboard);
        copyToClipboard.setClickable(false);

        deleteCalendar = findViewById(R.id.calendarSyncActivityDeleteButton);
        deleteCalendar.setOnClickListener(this::deleteCalendarBehavior);
        deleteCalendar.setClickable(false);

        exportToCalendar = findViewById(R.id.calendarSyncActivitySyncButton);
        exportToCalendar.setOnClickListener(this::createCalendar);
        exportToCalendar.setClickable(false);

        MainUser.getMainUser().getCalendarId_Once_AndThen(id -> {
            if (id != null && !id.equals("")) {
               calendarId = id;
               showCalendarId();
            } else {
               showCreateCalendar();
            }
        });

        clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
    }

    private void createCalendar(View view) {
        view.setClickable(false);
        Runnable onError = () -> runOnUiThread(() -> {
            showToast(getString(R.string.genericErrorText));
            view.setClickable(true);
        });
        Consumer<String> onCalendarIdCreated = newCalendarId -> CalendarUtilities.addUserToCalendar(this, newCalendarId,
                MainUser.getCurrentUserEmail(), () -> {
                    calendarId = newCalendarId;
                    MainUser.getMainUser().setCalendarId(calendarId);
                    runOnUiThread(this::showCalendarId);
                }, onError);

        CalendarUtilities.createCalendar(this, MainUser.getCurrentUserEmail(), onCalendarIdCreated, onError);
    }

    private void copyCalendarIdToClipboard(View view) {
        ClipData clip = ClipData.newPlainText("calendar id", calendarId);
        clipboard.setPrimaryClip(clip);
    }

    private void showCalendarId() {
        exportToCalendar.setVisibility(View.GONE);
        exportToCalendar.setClickable(false);

        calendarIdText.setText(calendarId);
        calendarIdText.setVisibility(View.VISIBLE);

        copyToClipboard.setVisibility(View.VISIBLE);
        copyToClipboard.setClickable(true);

        deleteCalendar.setVisibility(View.VISIBLE);
        deleteCalendar.setClickable(true);
    }

    private void showCreateCalendar() {
        exportToCalendar.setVisibility(View.VISIBLE);
        exportToCalendar.setClickable(true);

        calendarIdText.setVisibility(View.GONE);

        copyToClipboard.setVisibility(View.GONE);
        copyToClipboard.setClickable(false);

        deleteCalendar.setVisibility(View.GONE);
        deleteCalendar.setClickable(false);
    }

    private void deleteCalendarBehavior(View view) {
        view.setClickable(false);

        CalendarUtilities.deleteCalendar(this, calendarId, () -> {
            calendarId = "";
            MainUser.getMainUser().setCalendarId(calendarId);
            runOnUiThread(this::showCreateCalendar);
        }, () -> runOnUiThread(() -> {
            showToast(getString(R.string.genericErrorText));
            view.setClickable(true);
        }));
    }

    private void showToast(String message) {
        int duration = Toast.LENGTH_SHORT;
        Toast toast = Toast.makeText(this, message, duration);
        toast.show();
    }

}