Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,20 +1,21 @@
package org.a5calls.android.a5calls.controller;

import static androidx.test.espresso.Espresso.onView;
import static androidx.test.espresso.assertion.ViewAssertions.matches;
import static androidx.test.espresso.matcher.ViewMatchers.isDescendantOfA;
import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed;
import static androidx.test.espresso.matcher.ViewMatchers.withId;
import static androidx.test.espresso.matcher.ViewMatchers.withText;
import static org.hamcrest.Matchers.allOf;

import android.view.View;

import androidx.recyclerview.widget.RecyclerView;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.platform.app.InstrumentationRegistry;

import com.android.volley.RequestQueue;
import com.android.volley.toolbox.BasicNetwork;
import com.android.volley.toolbox.HttpResponse;

import org.a5calls.android.a5calls.AppSingleton;
import org.a5calls.android.a5calls.R;
import org.a5calls.android.a5calls.model.AccountManager;
import org.a5calls.android.a5calls.net.FakeRequestQueue;
import org.a5calls.android.a5calls.net.FiveCallsApi;
import org.a5calls.android.a5calls.net.MockHttpStack;
import org.hamcrest.Description;
import org.hamcrest.Matcher;
import org.hamcrest.TypeSafeMatcher;
Expand All @@ -24,17 +25,6 @@
import java.io.IOException;
import java.util.ArrayList;

import static androidx.test.espresso.Espresso.onView;
import static androidx.test.espresso.assertion.ViewAssertions.matches;
import static androidx.test.espresso.matcher.ViewMatchers.isDescendantOfA;
import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed;
import static androidx.test.espresso.matcher.ViewMatchers.withClassName;
import static androidx.test.espresso.matcher.ViewMatchers.withId;
import static androidx.test.espresso.matcher.ViewMatchers.withText;
import static org.hamcrest.Matchers.allOf;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.startsWith;

/**
* Integration test for MainActivity that tests error handling.
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import androidx.annotation.NonNull;
import androidx.annotation.VisibleForTesting;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.RecyclerView;

public class IssuesAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
Expand Down Expand Up @@ -457,7 +458,7 @@ public EmptyRequestViewHolder(View itemView) {
refreshButton = (Button) itemView.findViewById(R.id.refresh_btn);
// Tinting the compound drawable only works API 23+, so do this manually.
refreshButton.getCompoundDrawablesRelative()[0].mutate().setColorFilter(
refreshButton.getResources().getColor(R.color.colorAccent),
ContextCompat.getColor(itemView.getContext(), R.color.colorAccent),
PorterDuff.Mode.MULTIPLY);
}
}
Expand All @@ -470,7 +471,7 @@ public EmptyAddressViewHolder(View itemView) {
locationButton = (Button) itemView.findViewById(R.id.location_btn);
// Tinting the compound drawable only works API 23+, so do this manually.
locationButton.getCompoundDrawablesRelative()[0].mutate().setColorFilter(
locationButton.getResources().getColor(R.color.colorAccent),
ContextCompat.getColor(itemView.getContext(), R.color.colorAccent),
PorterDuff.Mode.MULTIPLY);
}
}
Expand All @@ -483,7 +484,7 @@ public EmptySearchViewHolder(View itemView) {
searchButton = (Button) itemView.findViewById(R.id.search_btn);
// Tinting the compound drawable only works API 23+, so do this manually.
searchButton.getCompoundDrawablesRelative()[0].mutate().setColorFilter(
searchButton.getResources().getColor(R.color.colorAccent),
ContextCompat.getColor(itemView.getContext(), R.color.colorAccent),
PorterDuff.Mode.MULTIPLY);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,26 +5,6 @@
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;

import androidx.activity.OnBackPressedCallback;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.content.res.AppCompatResources;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowCompat;
import androidx.core.graphics.Insets;
import androidx.core.view.WindowInsetsCompat;

import com.bumptech.glide.load.resource.bitmap.CircleCrop;
import com.google.android.gms.tasks.Task;
import com.google.android.material.bottomsheet.BottomSheetBehavior;

import androidx.annotation.VisibleForTesting;
import androidx.appcompat.app.AlertDialog;
import androidx.coordinatorlayout.widget.CoordinatorLayout;
import androidx.fragment.app.Fragment;
import androidx.core.widget.NestedScrollView;
import androidx.appcompat.app.AppCompatActivity;
import android.text.Html;
import android.text.TextUtils;
import android.text.method.LinkMovementMethod;
Expand All @@ -37,7 +17,27 @@
import android.widget.ImageView;
import android.widget.TextView;

import androidx.activity.OnBackPressedCallback;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.content.res.AppCompatResources;
import androidx.coordinatorlayout.widget.CoordinatorLayout;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowCompat;
import androidx.core.view.WindowInsetsCompat;
import androidx.core.widget.NestedScrollView;
import androidx.fragment.app.Fragment;

import com.bumptech.glide.Glide;
import com.bumptech.glide.load.resource.bitmap.CircleCrop;
import com.google.android.gms.tasks.Task;
import com.google.android.material.bottomsheet.BottomSheetBehavior;
import com.google.android.material.snackbar.Snackbar;
import com.google.android.play.core.review.ReviewInfo;
import com.google.android.play.core.review.ReviewManager;
Expand Down Expand Up @@ -79,8 +79,6 @@ public class IssueActivity extends AppCompatActivity implements FiveCallsApi.Scr
public static final int RESULT_OK = 1;
public static final int RESULT_SERVER_ERROR = 2;

private static final int REP_CALL_REQUEST_CODE = 1;

private static final String DONATE_URL = "https://secure.actblue.com/donate/5calls-donate?refcode=android&refcode2=";

private static final int MIN_CALLS_TO_SHOW_CALL_STATS = 10;
Expand All @@ -96,13 +94,23 @@ public class IssueActivity extends AppCompatActivity implements FiveCallsApi.Scr
private boolean mIsAnimating = false;

private ActivityIssueBinding binding;
private ActivityResultLauncher<Intent> mRepCallLauncher;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
WindowCompat.setDecorFitsSystemWindows(getWindow(), false);
binding = ActivityIssueBinding.inflate(getLayoutInflater());

// Register activity result launcher for RepCallActivity
mRepCallLauncher = registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(),
result -> {
if (result.getResultCode() == RESULT_SERVER_ERROR) {
mShowServerError = true;
}
});

mIssue = getIntent().getParcelableExtra(KEY_ISSUE);
if (mIssue == null) {
// TODO handle this better? Is it even possible to get here?
Expand Down Expand Up @@ -517,7 +525,7 @@ public void onClick(View view) {
intent.putExtra(RepCallActivity.KEY_LOCATION_NAME,
getIntent().getStringExtra(RepCallActivity.KEY_LOCATION_NAME));
intent.putExtra(RepCallActivity.KEY_ACTIVE_CONTACT_INDEX, index);
startActivityForResult(intent, REP_CALL_REQUEST_CODE);
mRepCallLauncher.launch(intent);
}
});
} else {
Expand Down Expand Up @@ -569,14 +577,6 @@ private void maybeShowIssueDone() {
}
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_SERVER_ERROR) {
mShowServerError = true;
}
}

private void showIssueDetails() {
new AlertDialog.Builder(IssueActivity.this)
.setTitle(R.string.details_btn)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,39 +1,38 @@
package org.a5calls.android.a5calls.controller;

import static org.a5calls.android.a5calls.controller.IssueActivity.KEY_IS_DISTRICT_SPLIT;

import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Rect;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.KeyEvent;
import android.view.MenuItem;
import android.view.View;
import android.view.inputmethod.EditorInfo;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBar;
import androidx.core.app.ActivityCompat;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowCompat;
import androidx.core.view.WindowInsetsCompat;

import android.text.TextUtils;
import android.view.KeyEvent;
import android.view.MenuItem;
import android.view.View;
import android.view.inputmethod.EditorInfo;
import android.widget.TextView;

import org.a5calls.android.a5calls.FiveCallsApplication;
import org.a5calls.android.a5calls.R;
import org.a5calls.android.a5calls.databinding.ActivityLocationBinding;
import org.a5calls.android.a5calls.model.AccountManager;

import java.util.Objects;

import static org.a5calls.android.a5calls.controller.IssueActivity.KEY_IS_DISTRICT_SPLIT;

public class LocationActivity extends AppCompatActivity {
private static final String TAG = "LocationActivity";

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@

import androidx.activity.OnBackPressedCallback;
import androidx.annotation.NonNull;
import androidx.core.content.ContextCompat;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowCompat;
Expand Down Expand Up @@ -505,7 +506,7 @@ public void onContactsReceived(String locationName, String districtId,
mSnackbar = Snackbar.make(binding.drawerLayout, R.string.split_district_warning,
Snackbar.LENGTH_INDEFINITE)
.setAction(R.string.update, view -> launchLocationActivity());
mSnackbar.setActionTextColor(getResources().getColor(
mSnackbar.setActionTextColor(ContextCompat.getColor(MainActivity.this,
R.color.colorAccentLight));
mSnackbar.addCallback(new BaseTransientBottomBar.BaseCallback<>() {
@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,12 @@
package org.a5calls.android.a5calls.controller;

import android.Manifest;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.util.Log;

import androidx.annotation.NonNull;
import androidx.core.app.ActivityCompat;
import androidx.fragment.app.DialogFragment;
import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.DialogFragment;

import com.onesignal.Continue;
import com.onesignal.OneSignal;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
import android.text.TextUtils;
import android.util.Log;

import androidx.core.content.ContextCompat;

import org.a5calls.android.a5calls.FiveCallsApplication;
import org.a5calls.android.a5calls.R;
import org.a5calls.android.a5calls.model.AccountManager;
Expand Down Expand Up @@ -82,14 +84,14 @@ public void onReceive(Context context, Intent intent) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
builder.setChannelId(CHANNEL_ID); // O and above require Notification Channels.
}
builder.setColor(context.getResources().getColor(R.color.colorPrimary));
builder.setColor(ContextCompat.getColor(context, R.color.colorPrimary));
// Set up a snooze action, which when clicked notifies this same broadcast receiver
Intent snoozeIntent = new Intent(context, NotifyBroadcastReceiver.class)
.setAction(ACTION_DO_SNOOZE);
PendingIntent pendingSnooze = PendingIntent.getBroadcast(context,
SNOOZE_REQUEST_CODE, snoozeIntent, PendingIntent.FLAG_IMMUTABLE);
Notification.Action snoozeAction = new Notification.Action.Builder(
R.drawable.ic_snooze_white_24dp,
android.graphics.drawable.Icon.createWithResource(context, R.drawable.ic_snooze_white_24dp),
context.getResources().getString(R.string.snooze),
pendingSnooze)
.build();
Expand All @@ -101,7 +103,7 @@ public void onReceive(Context context, Intent intent) {
PendingIntent pendingSettings = PendingIntent.getActivity(context,
GO_TO_SETTINGS_REQUEST_CODE, settingsIntent, PendingIntent.FLAG_IMMUTABLE);
Notification.Action settingsAction = new Notification.Action.Builder(
R.drawable.ic_settings_black_24dp,
android.graphics.drawable.Icon.createWithResource(context, R.drawable.ic_settings_black_24dp),
context.getResources().getString(R.string.settings),
pendingSettings)
.build();
Expand All @@ -112,7 +114,7 @@ public void onReceive(Context context, Intent intent) {
PendingIntent pendingCancel = PendingIntent.getBroadcast(context,
CANCEL_REQUEST_CODE, cancelIntent, PendingIntent.FLAG_IMMUTABLE);
Notification.Action cancelAction = new Notification.Action.Builder(
R.drawable.ic_close_white_24dp,
android.graphics.drawable.Icon.createWithResource(context, R.drawable.ic_close_white_24dp),
context.getResources().getString(R.string.dismiss),
pendingCancel)
.build();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,26 +1,11 @@
package org.a5calls.android.a5calls.controller;

import static org.a5calls.android.a5calls.controller.IssueActivity.KEY_ISSUE;

import android.app.Activity;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;

import androidx.annotation.Nullable;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowCompat;
import androidx.core.view.WindowInsetsCompat;

import com.bumptech.glide.load.resource.bitmap.CircleCrop;
import com.google.android.material.snackbar.Snackbar;

import androidx.annotation.VisibleForTesting;
import androidx.core.app.NavUtils;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.GridLayoutManager;

import android.text.TextUtils;
import android.text.util.Linkify;
import android.util.DisplayMetrics;
Expand All @@ -31,7 +16,20 @@
import android.view.ViewGroup;
import android.widget.TextView;

import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.NavUtils;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowCompat;
import androidx.core.view.WindowInsetsCompat;
import androidx.recyclerview.widget.GridLayoutManager;

import com.bumptech.glide.Glide;
import com.bumptech.glide.load.resource.bitmap.CircleCrop;
import com.google.android.material.snackbar.Snackbar;

import org.a5calls.android.a5calls.AppSingleton;
import org.a5calls.android.a5calls.FiveCallsApplication;
Expand All @@ -45,15 +43,12 @@
import org.a5calls.android.a5calls.model.Issue;
import org.a5calls.android.a5calls.model.Outcome;
import org.a5calls.android.a5calls.net.FiveCallsApi;
import org.a5calls.android.a5calls.util.AnalyticsManager;
import org.a5calls.android.a5calls.util.ScriptReplacements;
import org.a5calls.android.a5calls.util.MarkdownUtil;
import org.a5calls.android.a5calls.util.ScriptReplacements;
import org.a5calls.android.a5calls.view.GridItemDecoration;

import java.util.List;

import static org.a5calls.android.a5calls.controller.IssueActivity.KEY_ISSUE;

/**
* Activity which handles showing a script for a rep and logging calls.
*/
Expand Down
Loading
Loading