Java tutorial
/** * Copyright 2016 Google Inc. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.eusecom.attendance; import android.app.ProgressDialog; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.provider.MediaStore; import android.support.annotation.NonNull; import android.support.v4.content.LocalBroadcastManager; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import android.widget.TextView; import android.widget.Toast; import com.google.android.gms.tasks.OnFailureListener; import com.google.android.gms.tasks.OnSuccessListener; import com.google.firebase.auth.AuthResult; import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.auth.FirebaseUser; import com.google.firebase.storage.FirebaseStorage; import com.google.firebase.storage.StorageReference; import com.google.firebase.storage.UploadTask; import java.util.Locale; public class StorageActivity extends AppCompatActivity implements View.OnClickListener { private static final String TAG = "Storage#StorageActivity"; private static final int RC_TAKE_PICTURE = 101; private static final int RC_STORAGE_PERMS = 102; private static final int RESULT_OK = 0; private static int RESULT_LOAD_IMAGE = 1; private static final int REQUEST_CODE_CAPTURE_IMAGE = 1; private static final String KEY_FILE_URI = "key_file_uri"; private static final String KEY_DOWNLOAD_URL = "key_download_url"; private BroadcastReceiver mDownloadReceiver; private ProgressDialog mProgressDialog; private FirebaseAuth mAuth; private Uri mDownloadUrl = null; private Uri mFileUri = null; // [START declare_ref] private StorageReference mStorageRef; // [END declare_ref @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_storage); // Initialize Firebase Auth mAuth = FirebaseAuth.getInstance(); // Initialize Firebase Storage Ref // [START get_storage_ref] mStorageRef = FirebaseStorage.getInstance().getReference(); // [END get_storage_ref] // Click listeners findViewById(R.id.button_camera).setOnClickListener(this); findViewById(R.id.button_sign_in).setOnClickListener(this); findViewById(R.id.button_download).setOnClickListener(this); // Restore instance state if (savedInstanceState != null) { mFileUri = savedInstanceState.getParcelable(KEY_FILE_URI); mDownloadUrl = savedInstanceState.getParcelable(KEY_DOWNLOAD_URL); } // Download receiver mDownloadReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { Log.d(TAG, "downloadReceiver:onReceive:" + intent); hideProgressDialog(); if (com.eusecom.attendance.MyDownloadService.ACTION_COMPLETED.equals(intent.getAction())) { String path = intent .getStringExtra(com.eusecom.attendance.MyDownloadService.EXTRA_DOWNLOAD_PATH); long numBytes = intent .getLongExtra(com.eusecom.attendance.MyDownloadService.EXTRA_BYTES_DOWNLOADED, 0); // Alert success showMessageDialog("Success", String.format(Locale.getDefault(), "%d bytes downloaded from %s", numBytes, path)); } if (com.eusecom.attendance.MyDownloadService.ACTION_ERROR.equals(intent.getAction())) { String path = intent .getStringExtra(com.eusecom.attendance.MyDownloadService.EXTRA_DOWNLOAD_PATH); // Alert failure showMessageDialog("Error", String.format(Locale.getDefault(), "Failed to download from %s", path)); } } }; } @Override public void onStart() { super.onStart(); updateUI(mAuth.getCurrentUser()); // Register download receiver LocalBroadcastManager.getInstance(this).registerReceiver(mDownloadReceiver, com.eusecom.attendance.MyDownloadService.getIntentFilter()); } @Override public void onStop() { super.onStop(); // Unregister download receiver LocalBroadcastManager.getInstance(this).unregisterReceiver(mDownloadReceiver); } @Override public void onSaveInstanceState(Bundle out) { super.onSaveInstanceState(out); out.putParcelable(KEY_FILE_URI, mFileUri); out.putParcelable(KEY_DOWNLOAD_URL, mDownloadUrl); } public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_CODE_CAPTURE_IMAGE) { Uri selectedImage = data.getData(); uploadFromUri(selectedImage); } } // [START upload_from_uri] private void uploadFromUri(Uri fileUri) { Log.d(TAG, "uploadFromUri:src:" + fileUri.toString()); // [START get_child_ref] // Get a reference to store file at photos/<FILENAME>.jpg //final StorageReference photoRef = mStorageRef.child("photos").child(fileUri.getLastPathSegment()); final StorageReference photoRef = mStorageRef.child(fileUri.getLastPathSegment()); // [END get_child_ref] // Upload file to Firebase Storage // [START_EXCLUDE] showProgressDialog(); // [END_EXCLUDE] Log.d(TAG, "uploadFromUri:dst:" + photoRef.getPath()); photoRef.putFile(fileUri).addOnSuccessListener(this, new OnSuccessListener<UploadTask.TaskSnapshot>() { @Override public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { // Upload succeeded Log.d(TAG, "uploadFromUri:onSuccess"); // Get the public download URL mDownloadUrl = taskSnapshot.getMetadata().getDownloadUrl(); // [START_EXCLUDE] hideProgressDialog(); updateUI(mAuth.getCurrentUser()); // [END_EXCLUDE] } }).addOnFailureListener(this, new OnFailureListener() { @Override public void onFailure(@NonNull Exception exception) { // Upload failed Log.w(TAG, "uploadFromUri:onFailure", exception); mDownloadUrl = null; // [START_EXCLUDE] hideProgressDialog(); Toast.makeText(StorageActivity.this, "Error: upload failed", Toast.LENGTH_SHORT).show(); updateUI(mAuth.getCurrentUser()); // [END_EXCLUDE] } }); } // [END upload_from_uri] private void launchCamera() { Log.d(TAG, "launchCamera"); startActivityForResult(new Intent(MediaStore.ACTION_IMAGE_CAPTURE), REQUEST_CODE_CAPTURE_IMAGE); } private void signInAnonymously() { // Sign in anonymously. Authentication is required to read or write from Firebase Storage. showProgressDialog(); mAuth.signInAnonymously().addOnSuccessListener(this, new OnSuccessListener<AuthResult>() { @Override public void onSuccess(AuthResult authResult) { Log.d(TAG, "signInAnonymously:SUCCESS"); hideProgressDialog(); updateUI(authResult.getUser()); } }).addOnFailureListener(this, new OnFailureListener() { @Override public void onFailure(@NonNull Exception exception) { Log.e(TAG, "signInAnonymously:FAILURE", exception); hideProgressDialog(); updateUI(null); } }); } private void beginDownload() { // Get path //String path = "" + mFileUri.getLastPathSegment(); //String path = "5902"; String path = "poznamky.txt"; // Kick off download service Intent intent = new Intent(this, com.eusecom.attendance.MyDownloadService.class); intent.setAction(com.eusecom.attendance.MyDownloadService.ACTION_DOWNLOAD); intent.putExtra(com.eusecom.attendance.MyDownloadService.EXTRA_DOWNLOAD_PATH, path); startService(intent); // Show loading spinner showProgressDialog(); } private void updateUI(FirebaseUser user) { // Signed in or Signed out if (user != null) { findViewById(R.id.layout_signin).setVisibility(View.GONE); findViewById(R.id.layout_storage).setVisibility(View.VISIBLE); } else { findViewById(R.id.layout_signin).setVisibility(View.VISIBLE); findViewById(R.id.layout_storage).setVisibility(View.GONE); } // Download URL and Download button if (mDownloadUrl != null) { ((TextView) findViewById(R.id.picture_download_uri)).setText(mDownloadUrl.toString()); findViewById(R.id.layout_download).setVisibility(View.VISIBLE); } else { ((TextView) findViewById(R.id.picture_download_uri)).setText(null); //findViewById(R.id.layout_download).setVisibility(View.GONE); findViewById(R.id.layout_download).setVisibility(View.VISIBLE); } } private void showMessageDialog(String title, String message) { AlertDialog ad = new AlertDialog.Builder(this).setTitle(title).setMessage(message).create(); ad.show(); } private void showProgressDialog() { if (mProgressDialog == null) { mProgressDialog = new ProgressDialog(this); mProgressDialog.setMessage("Loading..."); mProgressDialog.setIndeterminate(true); } mProgressDialog.show(); } private void hideProgressDialog() { if (mProgressDialog != null && mProgressDialog.isShowing()) { mProgressDialog.dismiss(); } } @Override public void onClick(View v) { switch (v.getId()) { case R.id.button_camera: launchCamera(); break; case R.id.button_sign_in: signInAnonymously(); break; case R.id.button_download: beginDownload(); break; } } }