Skip to content

Instantly share code, notes, and snippets.

@JavaDeveloper
Created July 16, 2012 11:14
Show Gist options
  • Save JavaDeveloper/3122179 to your computer and use it in GitHub Desktop.
Save JavaDeveloper/3122179 to your computer and use it in GitHub Desktop.
package com.android.filechooser.example;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import com.iusenko.filechooser.FileChooserActivity;
public class MainActivity extends Activity {
private static final String TAG = MainActivity.class.getSimpleName();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
startActivityForResult(new Intent(this, FileChooserActivity.class), FileChooserActivity.PICK_UP_FILE_REQUEST);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.d(TAG, "onActivityResult(" + requestCode + ", " + resultCode + ",...)");
if (FileChooserActivity.FILE_SELECTED_RESULT != resultCode) {
return;
}
String path = data.getStringExtra(FileChooserActivity.SELECTED_FILE_KEY);
Log.d(TAG, "Selected file: " + path);
super.onActivityResult(requestCode, resultCode, data);
}
}
@Thor1440
Copy link

default

@akhileshkumar132
Copy link

Android

@akhileshkumar132
Copy link

@fsainzdelapena55
Copy link

import { useState } from 'react'
import { Button } from "/components/ui/button"
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "/components/ui/card"
import { Input } from "/components/ui/input"
import { Label } from "/components/ui/label"
import { Textarea } from "@/components/ui/textarea"
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"
import { Plus, Trash2, Upload, X, Eye } from 'lucide-react'

interface Coin {
id: string
code: string
name: string
country: string
year: number
continent: string
metal: string
value: number
observations: string
obverseImage?: string
reverseImage?: string
flagImage?: string
}

const continents = [
'Africa',
'Asia',
'Europe',
'North America',
'South America',
'Oceania',
'Antarctica'
]

const metals = [
'Gold',
'Silver',
'Copper',
'Bronze',
'Nickel',
'Aluminum',
'Zinc',
'Steel',
'Bi-metal',
'Other'
]

export default function CoinArchiver() {
const [coins, setCoins] = useState<Coin[]>([])
const [formData, setFormData] = useState({
code: '',
name: '',
country: '',
year: new Date().getFullYear(),
continent: '',
metal: '',
value: 0,
observations: ''
})
const [images, setImages] = useState({
obverse: '',
reverse: '',
flag: ''
})
const [selectedCoin, setSelectedCoin] = useState<Coin | null>(null)

const handleInputChange = (field: string, value: string | number) => {
setFormData(prev => ({ ...prev, [field]: value }))
}

const handleImageUpload = (type: 'obverse' | 'reverse' | 'flag', file: File) => {
const reader = new FileReader()
reader.onload = (e) => {
setImages(prev => ({ ...prev, [type]: e.target?.result as string }))
}
reader.readAsDataURL(file)
}

const addCoin = () => {
if (!formData.code || !formData.name || !formData.country || !formData.continent || !formData.metal) {
alert('Please fill in all required fields')
return
}

const newCoin: Coin = {
  id: Date.now().toString(),
  ...formData,
  obverseImage: images.obverse,
  reverseImage: images.reverse,
  flagImage: images.flag
}

setCoins(prev => [...prev, newCoin])

// Reset form
setFormData({
  code: '',
  name: '',
  country: '',
  year: new Date().getFullYear(),
  continent: '',
  metal: '',
  value: 0,
  observations: ''
})
setImages({ obverse: '', reverse: '', flag: '' })

}

const removeCoin = (id: string) => {
setCoins(prev => prev.filter(coin => coin.id !== id))
if (selectedCoin?.id === id) {
setSelectedCoin(null)
}
}

const totalCoins = coins.length
const totalValue = coins.reduce((sum, coin) => sum + coin.value, 0)

return (



Coin Archiver

    <div className="grid grid-cols-1 lg:grid-cols-3 gap-6">
      {/* Coin Entry Form */}
      <Card className="lg:col-span-2">
        <CardHeader>
          <CardTitle>Add New Coin</CardTitle>
          <CardDescription>Enter the details of your coin below</CardDescription>
        </CardHeader>
        <CardContent className="space-y-4">
          <div className="grid grid-cols-1 md:grid-cols-2 gap-4">
            <div>
              <Label htmlFor="code">Code *</Label>
              <Input
                id="code"
                value={formData.code}
                onChange={(e) => handleInputChange('code', e.target.value)}
                placeholder="e.g., USD-2024"
              />
            </div>
            <div>
              <Label htmlFor="name">Name *</Label>
              <Input
                id="name"
                value={formData.name}
                onChange={(e) => handleInputChange('name', e.target.value)}
                placeholder="e.g., Lincoln Cent"
              />
            </div>
            <div>
              <Label htmlFor="country">Country *</Label>
              <Input
                id="country"
                value={formData.country}
                onChange={(e) => handleInputChange('country', e.target.value)}
                placeholder="e.g., United States"
              />
            </div>
            <div>
              <Label htmlFor="year">Year</Label>
              <Input
                id="year"
                type="number"
                value={formData.year}
                onChange={(e) => handleInputChange('year', parseInt(e.target.value))}
              />
            </div>
            <div>
              <Label htmlFor="continent">Continent *</Label>
              <Select value={formData.continent} onValueChange={(value) => handleInputChange('continent', value)}>
                <SelectTrigger>
                  <SelectValue placeholder="Select continent" />
                </SelectTrigger>
                <SelectContent>
                  {continents.map(continent => (
                    <SelectItem key={continent} value={continent}>{continent}</SelectItem>
                  ))}
                </SelectContent>
              </Select>
            </div>
            <div>
              <Label htmlFor="metal">Metal *</Label>
              <Select value={formData.metal} onValueChange={(value) => handleInputChange('metal', value)}>
                <SelectTrigger>
                  <SelectValue placeholder="Select metal" />
                </SelectTrigger>
                <SelectContent>
                  {metals.map(metal => (
                    <SelectItem key={metal} value={metal}>{metal}</SelectItem>
                  ))}
                </SelectContent>
              </Select>
            </div>
            <div>
              <Label htmlFor="value">Value ($)</Label>
              <Input
                id="value"
                type="number"
                step="0.01"
                value={formData.value}
                onChange={(e) => handleInputChange('value', parseFloat(e.target.value))}
              />
            </div>
          </div>
          
          <div>
            <Label htmlFor="observations">Observations</Label>
            <Textarea
              id="observations"
              value={formData.observations}
              onChange={(e) => handleInputChange('observations', e.target.value)}
              placeholder="Any special notes about this coin..."
              rows={3}
            />
          </div>

          {/* Image Uploads */}
          <div className="grid grid-cols-1 md:grid-cols-3 gap-4">
            {(['obverse', 'reverse', 'flag'] as const).map(type => (
              <div key={type} className="space-y-2">
                <Label className="capitalize">{type} Image</Label>
                <div className="border-2 border-dashed border-gray-300 rounded-lg p-4">
                  {images[type] ? (
                    <div className="relative">
                      <img src={images[type]} alt={type} className="w-full h-32 object-cover rounded" />
                      <Button
                        size="sm"
                        variant="destructive"
                        className="absolute top-1 right-1"
                        onClick={() => setImages(prev => ({ ...prev, [type]: '' }))}
                      >
                        <X className="h-4 w-4" />
                      </Button>
                    </div>
                  ) : (
                    <label className="cursor-pointer flex flex-col items-center">
                      <Upload className="h-8 w-8 text-gray-400 mb-2" />
                      <span className="text-sm text-gray-500">Upload {type}</span>
                      <input
                        type="file"
                        accept="image/*"
                        className="hidden"
                        onChange={(e) => e.target.files?.[0] && handleImageUpload(type, e.target.files[0])}
                      />
                    </label>
                  )}
                </div>
              </div>
            ))}
          </div>

          <Button onClick={addCoin} className="w-full">
            <Plus className="mr-2 h-4 w-4" />
            Add Coin
          </Button>
        </CardContent>
      </Card>

      {/* Summary Display */}
      <div className="space-y-6">
        <Card>
          <CardHeader>
            <CardTitle>Collection Summary</CardTitle>
          </CardHeader>
          <CardContent className="space-y-4">
            <div className="flex justify-between items-center">
              <span className="text-muted-foreground">Total Coins:</span>
              <span className="text-2xl font-bold">{totalCoins}</span>
            </div>
            <div className="flex justify-between items-center">
              <span className="text-muted-foreground">Total Value:</span>
              <span className="text-2xl font-bold">${totalValue.toFixed(2)}</span>
            </div>
          </CardContent>
        </Card>

        {/* Recent Coins */}
        <Card>
          <CardHeader>
            <CardTitle>Recent Coins</CardTitle>
          </CardHeader>
          <CardContent>
            <div className="space-y-3 max-h-96 overflow-y-auto">
              {coins.length === 0 ? (
                <p className="text-muted-foreground text-center py-8">No coins added yet</p>
              ) : (
                coins.slice(-5).reverse().map(coin => (
                  <div key={coin.id} className="flex items-center justify-between p-3 bg-gray-50 rounded-lg">
                    <div>
                      <p className="font-medium">{coin.name}</p>
                      <p className="text-sm text-muted-foreground">{coin.country} - {coin.year}</p>
                    </div>
                    <div className="flex items-center gap-2">
                      <Button
                        size="sm"
                        variant="ghost"
                        onClick={() => setSelectedCoin(coin)}
                      >
                        <Eye className="h-4 w-4" />
                      </Button>
                      <span className="text-sm font-medium">${coin.value.toFixed(2)}</span>
                      <Button
                        size="sm"
                        variant="ghost"
                        onClick={() => removeCoin(coin.id)}
                      >
                        <Trash2 className="h-4 w-4" />
                      </Button>
                    </div>
                  </div>
                ))
              )}
            </div>
          </CardContent>
        </Card>
      </div>
    </div>

    {/* Full Coin List */}
    {coins.length > 0 && (
      <Card className="mt-6">
        <CardHeader>
          <CardTitle>All Coins</CardTitle>
        </CardHeader>
        <CardContent>
          <div className="overflow-x-auto">
            <table className="w-full">
              <thead>
                <tr className="border-b">
                  <th className="text-left py-2">Code</th>
                  <th className="text-left py-2">Name</th>
                  <th className="text-left py-2">Country</th>
                  <th className="text-left py-2">Year</th>
                  <th className="text-left py-2">Continent</th>
                  <th className="text-left py-2">Metal</th>
                  <th className="text-right py-2">Value ($)</th>
                  <th className="text-center py-2">Images</th>
                  <th className="text-center py-2">Actions</th>
                </tr>
              </thead>
              <tbody>
                {coins.map(coin => (
                  <tr key={coin.id} className="border-b">
                    <td className="py-2">{coin.code}</td>
                    <td className="py-2">{coin.name}</td>
                    <td className="py-2">{coin.country}</td>
                    <td className="py-2">{coin.year}</td>
                    <td className="py-2">{coin.continent}</td>
                    <td className="py-2">{coin.metal}</td>
                    <td className="py-2 text-right">${coin.value.toFixed(2)}</td>
                    <td className="py-2 text-center">
                      <div className="flex justify-center gap-1">
                        {coin.obverseImage && <div className="w-2 h-2 bg-blue-500 rounded-full" title="Obverse" />}
                        {coin.reverseImage && <div className="w-2 h-2 bg-green-500 rounded-full" title="Reverse" />}
                        {coin.flagImage && <div className="w-2 h-2 bg-red-500 rounded-full" title="Flag" />}
                      </div>
                    </td>
                    <td className="py-2 text-center">
                      <Button
                        size="sm"
                        variant="ghost"
                        onClick={() => setSelectedCoin(coin)}
                      >
                        <Eye className="h-4 w-4" />
                      </Button>
                      <Button
                        size="sm"
                        variant="ghost"
                        onClick={() => removeCoin(coin.id)}
                      >
                        <Trash2 className="h-4 w-4" />
                      </Button>
                    </td>
                  </tr>
                ))}
              </tbody>
            </table>
          </div>
        </CardContent>
      </Card>
    )}

    {/* Coin Details Modal */}
    {selectedCoin && (
      <div className="fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center p-4 z-50">
        <Card className="max-w-4xl w-full max-h-[90vh] overflow-y-auto">
          <CardHeader>
            <div className="flex justify-between items-start">
              <div>
                <CardTitle>{selectedCoin.name}</CardTitle>
                <CardDescription>
                  {selectedCoin.country} - {selectedCoin.year} - {selectedCoin.continent}
                </CardDescription>
              </div>
              <Button
                size="sm"
                variant="ghost"
                onClick={() => setSelectedCoin(null)}
              >
                <X className="h-4 w-4" />
              </Button>
            </div>
          </CardHeader>
          <CardContent className="space-y-4">
            <div className="grid grid-cols-1 md:grid-cols-2 gap-4">
              <div>
                <Label>Code:</Label>
                <p>{selectedCoin.code}</p>
              </div>
              <div>
                <Label>Metal:</Label>
                <p>{selectedCoin.metal}</p>
              </div>
              <div>
                <Label>Value:</Label>
                <p>${selectedCoin.value.toFixed(2)}</p>
              </div>
              <div>
                <Label>Observations:</Label>
                <p className="whitespace-pre-wrap">{selectedCoin.observations || 'No observations'}</p>
              </div>
            </div>

            <div className="grid grid-cols-1 md:grid-cols-3 gap-4">
              {selectedCoin.obverseImage && (
                <div>
                  <Label>Obverse</Label>
                  <img src={selectedCoin.obverseImage} alt="Obverse" className="w-full h-48 object-cover rounded" />
                </div>
              )}
              {selectedCoin.reverseImage && (
                <div>
                  <Label>Reverse</Label>
                  <img src={selectedCoin.reverseImage} alt="Reverse" className="w-full h-48 object-cover rounded" />
                </div>
              )}
              {selectedCoin.flagImage && (
                <div>
                  <Label>Flag</Label>
                  <img src={selectedCoin.flagImage} alt="Flag" className="w-full h-48 object-cover rounded" />
                </div>
              )}
            </div>
          </CardContent>
        </Card>
      </div>
    )}
  </div>
</div>

)
}
Share
Refresh

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment